home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #1 / Amiga Plus 1995 #1.iso / fish-disketten / fish_691-700 / d695 / icalc / scripts / array.ic next >
Text File  |  1994-12-13  |  1KB  |  57 lines

  1. # utility routines for arrays
  2. #
  3. # mws, February 1992
  4.  
  5.  
  6. # fill an array with a formula in n evaluated for index n
  7. # e.g.    fill(a,1)    fills the array with ones
  8. #    fill(a,n*n)    then a[1] = 1, a[2] = 4, a[3] = 9 etc.
  9. func fill(@a,~nexpr) = {
  10.     for (n = sizeof(a); n > 0; n-=1)    # n is GLOBAL
  11.         a[n] = nexpr;
  12. }
  13.  
  14.  
  15. # map a function in x to each array entry in turn
  16. # e.g.    fill(a,n); map(a,fact(x)) to produce factorial table
  17. func map(@a,~xexpr) = {
  18.     local j
  19.  
  20.     for (j = sizeof(a); j > 0; j-=1)
  21.     {
  22.         x = a[j]        # x is GLOBAL
  23.         a[j] = xexpr
  24.     }
  25. }
  26.  
  27.  
  28. # copy els of one array to another
  29. # if dest is not large enough, it is resized to accomodate source array.
  30. func copy(@to,@from) = {
  31.     local j
  32.  
  33.     j = sizeof(from)
  34.     if (sizeof(to) < j) resize(to,j)
  35.     for (; j > 0; j-=1)
  36.         to[j] = from[j]
  37. }
  38.  
  39.  
  40. # fills arrays xa with equally-spaced points from x1 to x2,
  41. # and ya with xexpr evaluated at these points.
  42. # eg. xa, ya of size 20, then
  43. #    tabulate(xa,ya,1,20,fact(x)) creates factorial table.
  44. # If sizes of xa and ya different, uses minimum size.
  45. func tabulate(@xa,@ya,x1,x2,~xexpr) = {
  46.     local n,j,dx
  47.  
  48.     n = min(sizeof(xa),sizeof(ya))
  49.     dx = (x2-x1)/(n-1)
  50.     x = x1        # x is global (for xexpr)
  51.     for (j = 1; j <= n; j+=1) {
  52.         xa[j] = x
  53.         ya[j] = xexpr
  54.         x += dx
  55.     }
  56. }
  57.